البرمجة

المصفوفات في PHP خطوة بخطوة

المصفوفات (Arrays) في PHP: الدليل الشامل والمتقدم

تمثل المصفوفات في لغة PHP إحدى الركائز الأساسية لبناء تطبيقات مرنة وقوية، حيث تُستخدم لتخزين مجموعة من القيم تحت متغير واحد. تسمح المصفوفات بتنظيم البيانات بشكل يتيح الوصول إليها ومعالجتها بسهولة، ما يجعلها أداة لا غنى عنها في تطوير البرمجيات. في هذا المقال الموسع، سيتم استعراض مفهوم المصفوفات في PHP بشكل دقيق، بدءًا من الأساسيات وحتى التقنيات المتقدمة، مع تسليط الضوء على الأنواع المختلفة للمصفوفات، وأساليب التعامل معها، وأهم الدوال المرتبطة بها، وكيفية استخدامها بفعالية في بيئات الإنتاج.


تعريف المصفوفات في PHP

المصفوفة في PHP هي نوع خاص من المتغيرات يمكنها تخزين أكثر من قيمة في وقت واحد، وتتميز بأنها تُمكن المطور من الوصول إلى القيم المخزنة عبر مفاتيح (keys) تُحدد كيفية استرجاع القيم. هذه المفاتيح قد تكون أرقامًا (في المصفوفات الفهرسية) أو سلاسل نصية (في المصفوفات الترابطية).

php
// مثال على مصفوفة بسيطة $fruits = array("Apple", "Banana", "Cherry");

أنواع المصفوفات في PHP

1. المصفوفات الفهرسية (Indexed Arrays)

هي المصفوفات التي تحتوي على مجموعة من القيم يُمكن الوصول إليها باستخدام فهرس رقمي يبدأ من 0.

php
$colors = array("Red", "Green", "Blue"); echo $colors[1]; // النتيجة: Green

يمكن أيضًا تعريف المصفوفة بدون استخدام array() في الإصدارات الحديثة من PHP باستخدام الأقواس المربعة:

php
$colors = ["Red", "Green", "Blue"];

2. المصفوفات الترابطية (Associative Arrays)

تُستخدم عندما تكون هناك حاجة لربط القيم بمفاتيح نصية بدلاً من المفاتيح الرقمية. هذا النوع من المصفوفات مفيد لتخزين البيانات المهيكلة مثل معلومات الأشخاص أو تفاصيل المنتجات.

php
$person = array( "name" => "Ahmed", "age" => 30, "country" => "Egypt" ); echo $person["name"]; // النتيجة: Ahmed

3. المصفوفات المتعددة الأبعاد (Multidimensional Arrays)

تُستخدم هذه المصفوفات لتخزين بيانات داخل مصفوفات أخرى، مما يسمح بتمثيل هياكل بيانات معقدة مثل الجداول والمصفوفات الهرمية.

php
$students = [ ["Ali", 90, "A"], ["Sara", 85, "B"], ["Mona", 95, "A+"] ]; echo $students[1][0]; // النتيجة: Sara

إنشاء وتعديل المصفوفات

يمكن إضافة عناصر جديدة إلى المصفوفة باستخدام الفهرس أو بدون تحديده:

php
$numbers = []; $numbers[] = 1; $numbers[] = 2; $numbers[] = 3;

لإضافة عنصر بمفتاح محدد:

php
$user["email"] = "[email protected]";

استعراض عناصر المصفوفة (Looping through Arrays)

يُعد التكرار من العمليات الجوهرية عند التعامل مع المصفوفات. توجد عدة طرق لذلك:

استخدام foreach

php
foreach ($colors as $color) { echo $color . "
"
; }

للمصفوفات الترابطية:

php
foreach ($person as $key => $value) { echo "$key: $value
"; }

استخدام for (للمصفوفات الفهرسية)

php
for ($i = 0; $i < count($colors); $i++) { echo $colors[$i] . "
"
; }

دوال معالجة المصفوفات في PHP

تحتوي PHP على مجموعة ضخمة من الدوال المخصصة للمصفوفات. فيما يلي مجموعة من الدوال الأكثر استخدامًا:

الدالة الوظيفة
array_push() إضافة عناصر إلى نهاية المصفوفة
array_pop() إزالة آخر عنصر من المصفوفة
array_shift() إزالة أول عنصر من المصفوفة
array_unshift() إضافة عناصر إلى بداية المصفوفة
array_merge() دمج مصفوفتين أو أكثر
array_keys() إرجاع جميع المفاتيح في مصفوفة
array_values() إرجاع جميع القيم في مصفوفة
in_array() التحقق مما إذا كانت قيمة موجودة داخل المصفوفة
array_search() البحث عن مفتاح قيمة معينة
sort() ترتيب عناصر مصفوفة فهرسية تصاعديًا
ksort() ترتيب عناصر مصفوفة ترابطية حسب المفاتيح
asort() ترتيب عناصر مصفوفة ترابطية حسب القيم

مثال:

php
$fruits = array("Banana", "Apple", "Orange"); sort($fruits); // تصبح المصفوفة مرتبة تصاعدياً

الفروق الجوهرية بين array_merge و +

عند دمج مصفوفتين باستخدام array_merge() يتم إعادة فهرسة المصفوفة، بينما عند استخدام عامل الجمع + تحتفظ المفاتيح الأصلية بقيمها.

php
$a = ["a" => 1, "b" => 2]; $b = ["b" => 3, "c" => 4]; $result_merge = array_merge($a, $b); // b = 3 $result_plus = $a + $b; // b = 2

المقارنة بين المصفوفات

PHP تقدم دوال وأدوات للمقارنة بين المصفوفات:

  • array_diff(): إرجاع القيم الموجودة في المصفوفة الأولى وغير موجودة في الثانية.

  • array_intersect(): إرجاع القيم المشتركة بين مصفوفتين.

php
$a = ["a", "b", "c"]; $b = ["b", "c", "d"]; $difference = array_diff($a, $b); // [0] => a $intersection = array_intersect($a, $b); // [1] => b, [2] => c

تحويل المتغيرات والمصفوفات

يمكن تحويل مصفوفة إلى سلسلة نصية باستخدام implode()، والعكس باستخدام explode():

php
$names = ["Ali", "Sara", "Khalid"]; $string = implode(", ", $names); // Ali, Sara, Khalid $new_array = explode(", ", $string); // تحويلها إلى مصفوفة من جديد

استخدام المصفوفات مع الدوال المخصصة

يمكن استخدام array_map() لتطبيق دالة معينة على جميع عناصر المصفوفة:

php
$numbers = [1, 2, 3, 4]; $squared = array_map(function($n) { return $n * $n; }, $numbers); // [1, 4, 9, 16]

كذلك، تستخدم array_filter() لتصفية القيم:

php
$filtered = array_filter($numbers, function($n) { return $n > 2; }); // [3, 4]

استخدام المصفوفات كستاك (Stack) وكصف (Queue)

يمكن للمصفوفات أن تحاكي بنى البيانات مثل الستاك والصف:

  • Stack (LIFO): باستخدام array_push() وarray_pop()

  • Queue (FIFO): باستخدام array_push() وarray_shift()


المصفوفات كوسيلة لتخزين الجلسات والكوكيز

تُستخدم المصفوفات بشكل واسع في التعامل مع البيانات المخزنة في الجلسات (sessions) والكوكيز (cookies):

php
$_SESSION['user'] = [ "id" => 5, "name" => "Mohamed" ];

أداء المصفوفات في PHP

تُعتبر المصفوفات في PHP بنية بيانات مرنة لكنها تستهلك ذاكرة كبيرة نسبيًا مقارنة باللغات الأخرى. من الأفضل استخدام الهياكل المتقدمة أو SplFixedArray عند التعامل مع كمية كبيرة من البيانات:

php
$arr = new SplFixedArray(100); $arr[0] = "value";

استخدام المصفوفات في بنية MVC

في نماذج التطبيقات الحديثة مثل MVC، تُستخدم المصفوفات لتمرير البيانات من النماذج إلى العروض (views)، وتمثيل الاستجابات من قواعد البيانات على شكل مصفوفات ترابطية.


الجداول التوضيحية

جدول يوضح الفروقات بين أنواع المصفوفات

النوع التعريف طريقة الوصول مثال
فهرسي مصفوفة بقيم مرتبة بمؤشر رقمي $arr[0] ["a", "b"]
ترابطي مصفوفة تربط القيم بمفاتيح نصية $arr["name"] ["name" => "Ali"]
متعددة الأبعاد مصفوفة تحتوي على مصفوفات أخرى $arr[0][1] [[1,2], [3,4]]

المصفوفات والمصفوفات الكائنية (ArrayObject)

تُتيح PHP أيضًا استخدام ArrayObject التي توفر طرقًا إضافية للتحكم بالمصفوفات كما لو كانت كائنات:

php
$arr = new ArrayObject(array("one" => 1, "two" => 2)); $arr->append(3);

الخاتمة

المصفوفات في PHP تمثل أداة قوية ومرنة تُستخدم في معظم سيناريوهات البرمجة، من معالجة البيانات إلى بناء التطبيقات الديناميكية. إن فهم أنواع المصفوفات، ودوالها، وأسلوب التفاعل معها، يمكن أن يسهم بشكل كبير في تحسين جودة الكود وزيادة كفاءته. وإدراك تفاصيل التعامل مع المصفوفات يُعد أمرًا محوريًا لكل مطور PHP يسعى إلى بناء حلول برمجية فعالة وعالية الأداء.


المراجع:

  1. PHP Manual: https://www.php.net/manual/en/language.types.array.php

  2. W3Schools PHP Arrays: https://www.w3schools.com/php/php_arrays.asp